Lua
学习文档:LuatOS 文档
在线环境:LuatOS 在线模拟 - lua在线测试
官网:official::The Programming Language Lua
官方API手册:official::Lua 5.3 Reference Manual - contents
一、Lua基础 1 数字变量
作用域:lua中声明的变量默认是全局变量,在其他文件中也可以使用。如果只想在当前文件夹中使用需要加上local
空值:lua中没有被声明过的变量都是nil
(相当于null值)
数字型:lua中的数字类型是number(不同于c,c有int,float等)。但是因为lua是用c写的,number实际上是c里面的double
a = 1 b = 2 local a = 1 print (c)a,b = 1 ,2 a,b,c = 1 ,2 a = 0x11 b = 2e10
2 运算符 a = b + c a = b - c a = b * c a = b / c a = b // c a = b ^ c a = b << c a = b >> c
3 字符串 a = "abcdef" b = "abc\ndef" c = [[abc \ndef gg]] c = a..b char = tostring (10 )num = tonumber ("10" ) len = #a
s = string .char (0x30 , 0x31 , 0x32 , 0x33 ) c = string .byte (str, index) s = string .char (0x30 , 0x00 , 0x31 , 0x32 , 0x33 ) print (s)print (#s)
4 函数
函数返回值默认是nil
函数传递变量时按顺序赋值,如果后面的变量没被赋值(函数需要传递三个变量但是实际上只传递了两个),那么后续的变量使用时值就为nil
函数返回值存在多个时,可以对返回值进行解包。
function function_name (...) end function_name = function (...) end
f = function (a,b,c) return a,b,c end print (f(1 ,2 ))local i,j = f(1 ,2 )print (i)print (j)
5 数组table
类似于python的list
table的下标是从1开始而不是0
table
遇到nil
会停下。所以如果直接给table
中的值赋值给nil
时,table
会认为到nil
的位置就是table
的结尾了,哪怕后面还有值。
a = {1 , "ac" , {}, function () end } print (a[1 ])len = #aa[5 ] = "gg"
table .insert (table , value)table .insert (table , index, value)local s = table .remove (table , index)
a = {1 , "ac" , {}, function () end } for key, value in ipairs (a) do print (key, value) end a[0 ] = "0" a[6 ] = 6 table .insert (a, "five" )table .insert (a, "seven" )table .remove (a, 3 )
6 字典table
table可以作为字典使用。
a = { a = 1 , b = "123456" , c = function () end , d = 123456 , [",;" ] = 123456 } print (a["a" ])print (a.a)print (a[",;" ])a["abc" ] = "abcdefg" print (a.abc)print (a.null)
7 全局表
在lua中有一个特殊的table是_G
,_G
存储所有的全局变量
print (_G )a = 1 print (_G .a)for key,value in pairs (_G ) do print (key, value) end print (_G .table )print (_G .table .insert )
8 条件判断
在lua中,只有nil
和false
才代表假,其他都是真,包括0这些。
a = true b = false print (1 > 2 )print (1 < 2 )print (1 == 2 )print (1 >= 2 )print (1 ~= 2 ) print (a and b) print (a or b) print (not a) print (a > 10 and "yes" or "no" )if 1 > 10 then print ("1 > 10" ) elseif 1 < 10 then print ("1 < 10" ) else print ("no" ) end
9 循环
注:lua中没有n--
和n-=1
这种操作,只能是n = n - 1
for i = 1 , 10 , 2 do print (i) if i == 5 then break end end for i = 10 , 1 , -1 do print ("first:" ..tostring (i)) i = 5 print ("local:" ..tostring (i)) end local n = 10 while n > 1 do n = n - 1 print (n) end
二、Lua进阶